
// Boost Includes ==============================================================
#include <boost/python.hpp>
#include <boost/cstdint.hpp>

// Includes ====================================================================
#include <OpenSG/OSGVector.h>
#include <Wrappers.h>

// Using =======================================================================
using namespace boost::python;

// Module ======================================================================
void Export_src_pyste_Vec()
{
    class_< osg::VectorInterface<float,osg::VecStorage3<float> >, bases< osg::PointInterface<float,osg::VecStorage3<float> > >  >("Vec3f", init<  >())
        .def(init< const osg::Real32* >())
        .def(init< osg::Real32* >())
        .def(init< const osg::VectorInterface<float,osg::VecStorage3<float> >& >())
        .def(init< const osg::Real32, const osg::Real32 >())
        .def(init< const osg::Real32, const osg::Real32, const osg::Real32 >())
        .def(init< const osg::Real32, const osg::Real32, const osg::Real32, const osg::Real32 >())
        .def("length", &osg::VectorInterface<float,osg::VecStorage3<float> >::length)
        .def("squareLength", &osg::VectorInterface<float,osg::VecStorage3<float> >::squareLength)
        .def("normalize", &osg::VectorInterface<float,osg::VecStorage3<float> >::normalize)
        .def("cross", &osg::VectorInterface<float,osg::VecStorage3<float> >::cross)
        .def("crossThis", &osg::VectorInterface<float,osg::VecStorage3<float> >::crossThis)
        .def("dot", (osg::Real32 (osg::VectorInterface<float,osg::VecStorage3<float> >::*)(const osg::VectorInterface<float,osg::VecStorage3<float> >&) const)&osg::VectorInterface<float,osg::VecStorage3<float> >::dot)
        .def("dot", (osg::Real32 (osg::VectorInterface<float,osg::VecStorage3<float> >::*)(const osg::PointInterface<float,osg::VecStorage3<float> >&) const)&osg::VectorInterface<float,osg::VecStorage3<float> >::dot)
        .def("enclosedAngle", &osg::VectorInterface<float,osg::VecStorage3<float> >::enclosedAngle)
        .def("projectTo", &osg::VectorInterface<float,osg::VecStorage3<float> >::projectTo)
        .def("addToZero", (osg::PointInterface<float,osg::VecStorage3<float> >& (osg::VectorInterface<float,osg::VecStorage3<float> >::*)() )&osg::VectorInterface<float,osg::VecStorage3<float> >::addToZero, return_internal_reference< 1 >())
        .def("addToZero", (const osg::PointInterface<float,osg::VecStorage3<float> >& (osg::VectorInterface<float,osg::VecStorage3<float> >::*)() const)&osg::VectorInterface<float,osg::VecStorage3<float> >::addToZero, return_internal_reference< 1 >())
        .def("subZero", (osg::VectorInterface<float,osg::VecStorage3<float> >& (osg::VectorInterface<float,osg::VecStorage3<float> >::*)() )&osg::VectorInterface<float,osg::VecStorage3<float> >::subZero, return_internal_reference< 1 >())
        .def("subZero", (const osg::VectorInterface<float,osg::VecStorage3<float> >& (osg::VectorInterface<float,osg::VecStorage3<float> >::*)() const)&osg::VectorInterface<float,osg::VecStorage3<float> >::subZero, return_internal_reference< 1 >())
        .def( self % self )
        .def( self * self )
        .def( self * other< osg::PointInterface<float,osg::VecStorage3<float> > >() )
        .def( self - self )
        .def( self + self )
        .def( self * other< osg::Real32 >() )
        .def( -self )
        .def( self < self )
        .def( self == self )
        .def( self != self )
    ;

    class_< osg::VectorInterface<float,osg::VecStorage4<float> >, bases< osg::PointInterface<float,osg::VecStorage4<float> > >  >("Vec4f", init<  >())
        .def(init< const osg::Real32* >())
        .def(init< osg::Real32* >())
        .def(init< const osg::VectorInterface<float,osg::VecStorage4<float> >& >())
        .def(init< const osg::Real32, const osg::Real32 >())
        .def(init< const osg::Real32, const osg::Real32, const osg::Real32 >())
        .def(init< const osg::Real32, const osg::Real32, const osg::Real32, const osg::Real32 >())
        .def("length", &osg::VectorInterface<float,osg::VecStorage4<float> >::length)
        .def("squareLength", &osg::VectorInterface<float,osg::VecStorage4<float> >::squareLength)
        .def("normalize", &osg::VectorInterface<float,osg::VecStorage4<float> >::normalize)
        .def("cross", &osg::VectorInterface<float,osg::VecStorage4<float> >::cross)
        .def("crossThis", &osg::VectorInterface<float,osg::VecStorage4<float> >::crossThis)
        .def("dot", (osg::Real32 (osg::VectorInterface<float,osg::VecStorage4<float> >::*)(const osg::VectorInterface<float,osg::VecStorage4<float> >&) const)&osg::VectorInterface<float,osg::VecStorage4<float> >::dot)
        .def("dot", (osg::Real32 (osg::VectorInterface<float,osg::VecStorage4<float> >::*)(const osg::PointInterface<float,osg::VecStorage4<float> >&) const)&osg::VectorInterface<float,osg::VecStorage4<float> >::dot)
        .def("enclosedAngle", &osg::VectorInterface<float,osg::VecStorage4<float> >::enclosedAngle)
        .def("projectTo", &osg::VectorInterface<float,osg::VecStorage4<float> >::projectTo)
        .def("addToZero", (osg::PointInterface<float,osg::VecStorage4<float> >& (osg::VectorInterface<float,osg::VecStorage4<float> >::*)() )&osg::VectorInterface<float,osg::VecStorage4<float> >::addToZero, return_internal_reference< 1 >())
        .def("addToZero", (const osg::PointInterface<float,osg::VecStorage4<float> >& (osg::VectorInterface<float,osg::VecStorage4<float> >::*)() const)&osg::VectorInterface<float,osg::VecStorage4<float> >::addToZero, return_internal_reference< 1 >())
        .def("subZero", (osg::VectorInterface<float,osg::VecStorage4<float> >& (osg::VectorInterface<float,osg::VecStorage4<float> >::*)() )&osg::VectorInterface<float,osg::VecStorage4<float> >::subZero, return_internal_reference< 1 >())
        .def("subZero", (const osg::VectorInterface<float,osg::VecStorage4<float> >& (osg::VectorInterface<float,osg::VecStorage4<float> >::*)() const)&osg::VectorInterface<float,osg::VecStorage4<float> >::subZero, return_internal_reference< 1 >())
        .def( self % self )
        .def( self * self )
        .def( self * other< osg::PointInterface<float,osg::VecStorage4<float> > >() )
        .def( self - self )
        .def( self + self )
        .def( self * other< osg::Real32 >() )
        .def( -self )
        .def( self < self )
        .def( self == self )
        .def( self != self )
    ;

}

